#pragma once
#ifndef _SETTINGS_
#define _SETTINGS_

#include <QtCore/QSettings>
#include <QtCore/QTextCodec>
#include <QtCore/QCoreApplication>

//================================================================================================================================
//================================================================================================================================
class Settings
{
public:
    static Settings* instance()
    {
        Q_ASSERT_X(m_Instance != NULL, "Settings::instance", "Settings object are not initialized");
        return m_Instance;
    }

    // Обновить настройки до последней версии.
    void updateSettings();

    // Задать значение указанной опции.
    void setSetting(const QString &key, const QVariant &val)
    {
        m_Settings->setValue(key, val);
    }

    // Получить значение указанной опции.
    QVariant setting(const QString &key) const
    {
        return m_Settings->value(key);
    }

    // Подсоединение к файлу с настройками.
    static void init()
    {
        m_Instance = new Settings();
        m_Instance->m_Settings = new QSettings(qApp->applicationDirPath() + "/bridgman.ini", QSettings::IniFormat);
        m_Instance->m_Settings->setIniCodec(QTextCodec::codecForName("UTF-8"));
    }

    // Отсоединение от файла с настройками.
    static void deinit()
    {
        delete m_Instance->m_Settings;
        delete m_Instance;
    }

private:
    // Запрещаем явно создавать/удалять объекты класса.
    Settings(){}
    ~Settings(){}

    QSettings *m_Settings;          // Класс для доступа к настройкам.
    static Settings *m_Instance;    // Единственный доступный экземпляр класса.
};

#endif // _SETTINGS_
